/**
 * 结构赋值，模式匹原则
 */

// 数组的结构，按照变量在数组的排列顺序进行赋值

// ...c element must be last element

let [a, , b, ...c] = [1, 2, 3, 4, 5, 6, 7]

// console.log(a, b, c) // a = 1, b = 3 , c = [4, 5, 6, 7]

// 对象的结构赋值， 变量名必须与属性名一致

let { name, age, job } = {
    name: 'bob',
    age: 24
}

// 没有解构到的变量将被赋予undefined

// console.log(name, age, job) // name = 'bob', age = 24, job = undefined

// 将对象的属性和方法赋值到对应的变量上面

let { num, sayNum } = {
    num: 12,
    sayNum: () => {
        console.log('hoho')
    }
}

const { log } = console

// log(num) // 12


let { dod: otherDod } = { dod: 'dod匹配模式，而otherDod是实际赋值的变量' }

// log(otherDod) // dod模式，而otherDod是实际赋值打变量

// 字符串的解构赋值, 类数组的对象都有一个length属性,因此可以对这个属性进行解构赋值

let [ index_1, index_2 ] = 'h1'

// console.log(index_1, index_2) // h l

// 函数参数的解构赋值

function setHel ({x, y}) {
    console.log(x + y)
}

setHel({x: 1, y: 2})
